/*
 * TelaAluguelCadastroCusto.java
 *
 * Created on __DATE__, __TIME__
 */

package telas.aluguel;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import business.aluguel.Custo;
import business.aluguel.Produto;
import business.sistema.ExceptionSistema;
import business.sistema.IObjetoSistema;
import business.util.Menssagens;
import telas.comum.TelaDialogoCadastroItens;

/**
 *
 * @author  __USER__
 */
public class TelaAluguelCadastroCusto extends TelaDialogoCadastroItens
{
	private static final long serialVersionUID = 4964649553570800860L;

	/** Creates new form TelaAluguelCadastroCusto */
	public TelaAluguelCadastroCusto(java.awt.Frame parent, boolean modal)
			throws Exception
	{
		super(parent, modal);
		initComponents();
	}

	public TelaAluguelCadastroCusto(IObjetoSistema objetoSistem, boolean novo)
			throws Exception
	{
		super();
		initComponents();

		setObjetoDados(objetoSistem);
		setNovo(novo);

		// A cada alteração no produto ele altera o valor do produto.
		cplProduto.registerObserver(cndValor);

		if (!isNovo())
		{
			setTitle("Alterar Custo");
		} else
		{
			setTitle("Cadastrar Custo");
		}

		eventoSalvar();
		eventoFechar();

		setVisible(true);
	}

	private void eventoFechar()
	{
		botBotoes.getBtFechar().addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				try
				{
					dispose();
				} catch (Exception ex)
				{
					new ExceptionSistema(ex);
				}
			}
		});
	}

	private void eventoSalvar()
	{
		botBotoes.getBtSalvar().addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				try
				{
					salvar();

				} catch (Exception ex)
				{
					new ExceptionSistema(ex);
				}
			}
		});
	}

	@Override
	public void salvar() throws Exception
	{
		preencheObjeto();

		dispose();
	}

	public void preencheObjeto() throws Exception
	{
		String mensagem = "";

		Produto produto = (Produto) cplProduto.getObjeto();
		if (produto.getCodigo() == 0)
		{
			mensagem += "Produto " + Menssagens.itemObrigatorio;
		}

		String quantidade = cniQuantidade.getNumero();
		if (quantidade.equals("") || quantidade.equals("0.00"))
		{
			mensagem += "\nQuantidade " + Menssagens.itemObrigatorio;
		}

		String valor = cndValor.getNumero();
		if (valor.equals("") || valor.equals("0.00"))
		{
			mensagem += "\nValor " + Menssagens.itemObrigatorio;
		}

		if (mensagem.equals(""))
		{
			Custo custo = (Custo) getObjetoDados();

			custo.setProduto(produto);
			custo.setQuantidade(Double.parseDouble(quantidade));
			custo.setValor(Double.parseDouble(valor));
		} else
		{
			throw new Exception(mensagem);
		}
	}

	@Override
	public void preencheFormulario() throws Exception
	{
		Custo custo = (Custo) getObjetoDados();

		cplProduto.setObjeto(custo.getProduto());
		cniQuantidade.setText(String.valueOf((int)custo.getQuantidade()));
		cndValor.setText(String.valueOf(custo.getValor()));
		cndTotal.setText(String.valueOf(custo.getCustoTotal()));
	}

	private ArrayList<String[]> formatarGridPesquisaCliente()
	{
		ArrayList<String[]> descricaoColunas = new ArrayList<String[]>();
		descricaoColunas.add(new String[]
		{ "Produto", "getNome", "300" });
		descricaoColunas.add(new String[]
		{ "Valor", "getValor" });

		return descricaoColunas;
	}

	//GEN-BEGIN:initComponents
	// <editor-fold defaultstate="collapsed" desc="Generated Code">
	private void initComponents()
	{

		pnlPrincipal = new telas.componentes.Painel();
		botBotoes = new telas.componentes.BarraOperacoesTela();
		pnlCadastro = new telas.componentes.Painel();
		rotulo1 = new telas.componentes.Rotulo();
		cplProduto = new telas.componentes.CampoPopupLocalizador();
		rotulo2 = new telas.componentes.Rotulo();
		rotulo3 = new telas.componentes.Rotulo();
		cndValor = new telas.componentes.CampoNumeroDecimal();
		rotulo4 = new telas.componentes.Rotulo();
		cndTotal = new telas.componentes.CampoNumeroDecimal();
		cniQuantidade = new telas.componentes.CampoNumeroInteiro();

		setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

		pnlPrincipal.setLayout(new java.awt.BorderLayout());
		pnlPrincipal.add(botBotoes, java.awt.BorderLayout.PAGE_END);

		pnlCadastro.setBorder(javax.swing.BorderFactory
				.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));

		rotulo1.setText("Produto:");

		cplProduto.setAtributoVisualizacao("Nome");
		cplProduto.setCampoPesquisa("nome");
		cplProduto.setClassePesquisa("business.aluguel.Produto");
		cplProduto.setDescricaoPesquisa("Nome:");
		cplProduto.setFormatoGridPesquisa(formatarGridPesquisaCliente());

		rotulo2.setText("Quantidade:");

		rotulo3.setText("Valor:");

		cndValor.setAtributoObservado("Valor");
		cndValor.addFocusListener(new java.awt.event.FocusAdapter()
		{
			public void focusLost(java.awt.event.FocusEvent evt)
			{
				cndValorFocusLost(evt);
			}
		});

		rotulo4.setText("Total:");

		javax.swing.GroupLayout pnlCadastroLayout = new javax.swing.GroupLayout(
				pnlCadastro);
		pnlCadastro.setLayout(pnlCadastroLayout);
		pnlCadastroLayout
				.setHorizontalGroup(pnlCadastroLayout
						.createParallelGroup(
								javax.swing.GroupLayout.Alignment.LEADING)
						.addGroup(
								pnlCadastroLayout
										.createSequentialGroup()
										.addContainerGap()
										.addGroup(
												pnlCadastroLayout
														.createParallelGroup(
																javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
																rotulo1,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
																rotulo2,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
																rotulo3,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
																rotulo4,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE))
										.addGap(13, 13, 13)
										.addGroup(
												pnlCadastroLayout
														.createParallelGroup(
																javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
																cplProduto,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																410,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addGroup(
																pnlCadastroLayout
																		.createParallelGroup(
																				javax.swing.GroupLayout.Alignment.TRAILING,
																				false)
																		.addComponent(
																				cndTotal,
																				javax.swing.GroupLayout.Alignment.LEADING,
																				javax.swing.GroupLayout.DEFAULT_SIZE,
																				javax.swing.GroupLayout.DEFAULT_SIZE,
																				Short.MAX_VALUE)
																		.addComponent(
																				cndValor,
																				javax.swing.GroupLayout.Alignment.LEADING,
																				javax.swing.GroupLayout.DEFAULT_SIZE,
																				javax.swing.GroupLayout.DEFAULT_SIZE,
																				Short.MAX_VALUE)
																		.addGroup(
																				javax.swing.GroupLayout.Alignment.LEADING,
																				pnlCadastroLayout
																						.createSequentialGroup()
																						.addPreferredGap(
																								javax.swing.LayoutStyle.ComponentPlacement.RELATED)
																						.addComponent(
																								cniQuantidade,
																								javax.swing.GroupLayout.DEFAULT_SIZE,
																								133,
																								Short.MAX_VALUE))))
										.addContainerGap(
												javax.swing.GroupLayout.DEFAULT_SIZE,
												Short.MAX_VALUE)));
		pnlCadastroLayout
				.setVerticalGroup(pnlCadastroLayout
						.createParallelGroup(
								javax.swing.GroupLayout.Alignment.LEADING)
						.addGroup(
								pnlCadastroLayout
										.createSequentialGroup()
										.addContainerGap()
										.addGroup(
												pnlCadastroLayout
														.createParallelGroup(
																javax.swing.GroupLayout.Alignment.CENTER)
														.addComponent(
																rotulo1,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
																cplProduto,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE))
										.addPreferredGap(
												javax.swing.LayoutStyle.ComponentPlacement.RELATED)
										.addGroup(
												pnlCadastroLayout
														.createParallelGroup(
																javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
																rotulo2,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
																cniQuantidade,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE))
										.addPreferredGap(
												javax.swing.LayoutStyle.ComponentPlacement.RELATED)
										.addGroup(
												pnlCadastroLayout
														.createParallelGroup(
																javax.swing.GroupLayout.Alignment.BASELINE)
														.addComponent(
																rotulo3,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
																cndValor,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE))
										.addPreferredGap(
												javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
										.addGroup(
												pnlCadastroLayout
														.createParallelGroup(
																javax.swing.GroupLayout.Alignment.BASELINE)
														.addComponent(
																rotulo4,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
																cndTotal,
																javax.swing.GroupLayout.PREFERRED_SIZE,
																javax.swing.GroupLayout.DEFAULT_SIZE,
																javax.swing.GroupLayout.PREFERRED_SIZE))
										.addContainerGap(17, Short.MAX_VALUE)));

		pnlPrincipal.add(pnlCadastro, java.awt.BorderLayout.CENTER);

		javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
				getContentPane());
		getContentPane().setLayout(layout);
		layout.setHorizontalGroup(layout.createParallelGroup(
				javax.swing.GroupLayout.Alignment.LEADING).addComponent(
				pnlPrincipal, javax.swing.GroupLayout.DEFAULT_SIZE,
				javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
		layout.setVerticalGroup(layout.createParallelGroup(
				javax.swing.GroupLayout.Alignment.LEADING).addComponent(
				pnlPrincipal, javax.swing.GroupLayout.DEFAULT_SIZE, 182,
				Short.MAX_VALUE));

		pack();
	}// </editor-fold>
	//GEN-END:initComponents

	private void cndValorFocusLost(java.awt.event.FocusEvent evt)
	{
		try
		{
			calculaValores();
		} catch (Exception ex)
		{
			new ExceptionSistema(ex);
		}
	}

	private void calculaValores()
	{
		double quantidade = Double.parseDouble(cniQuantidade.getNumero());
		double valor = Double.parseDouble(cndValor.getNumero());

		double valorTotal = quantidade * valor;

		cndTotal.setText(String.valueOf(valorTotal));
	}

	//GEN-BEGIN:variables
	// Variables declaration - do not modify
	private telas.componentes.BarraOperacoesTela botBotoes;
	private telas.componentes.CampoNumeroDecimal cndTotal;
	private telas.componentes.CampoNumeroDecimal cndValor;
	private telas.componentes.CampoNumeroInteiro cniQuantidade;
	private telas.componentes.CampoPopupLocalizador cplProduto;
	private telas.componentes.Painel pnlCadastro;
	private telas.componentes.Painel pnlPrincipal;
	private telas.componentes.Rotulo rotulo1;
	private telas.componentes.Rotulo rotulo2;
	private telas.componentes.Rotulo rotulo3;
	private telas.componentes.Rotulo rotulo4;
	// End of variables declaration//GEN-END:variables

}